#include<bits/stdc++.h>
using namespace std;
int a[100005],aa[100005],c[100005],x[15];
vector<int> s[5];
string st[100005];
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    int n,m,k=0,kk=1,T,opr=1;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&aa[i]);
    }
    for(int i=1;i<=m;i++){
        scanf("%d",&c[i]);
    }
    while(kk<n) {
        kk*=2;
        k++;
    }
    for(int i=1;i<=k;i++){
        cin>>st[i];
    }
    scanf("%d",&T);
    while(T--){
        for(int i=1;i<=4;i++){
            scanf("%d",&x[i]);
        }
        for(int i=1;i<=n;i++){
            a[i]=aa[i]^(x[i%4]);
            s[1].push_back(i);
        }
        for(int i=1;i<=k;i++){
            for(int j=1;j<=st[i].size();j++){
                int op=(st[i][j-1])-'0',d,dd;
                if(op==0) {
                    d=max(s[opr][2*j-1],s[opr][2*j]);
                    dd=min(s[opr][2*j-1],s[opr][2*j]);
               }
                else {
                    d=min(s[opr][2*j-1],s[opr][2*j]);
                    dd=max(s[opr][2*j-1],s[opr][2*j]);
                }
                if(a[d]>=i) s[opr^1].push_back(d);
                else s[opr^1].push_back(dd);
                opr=opr^1;
            }
        }
        printf("%d\n",s[opr][0]);
    }
    return 0;
}